package cn.jimmie.learn.viewArt.ball;

import android.content.Context;

/**
 * function : AssistBallView 的事件处理接口, 用于解耦
 *
 * <p> Create Time: 2019年01月01日 10:28 </p>
 * <p> @author Jimmie.Qian  </p>
 */
interface EventSource {
    /**
     * ball 的点击回调
     */
    void onClick(boolean lock);

    /**
     * ball 移动的相对位置
     */
    void moveBy(int x, int y);

    /**
     * ball 移动动画结束回调
     */
    void onScrollOver();

    void onAttachedEdge();

    /**
     * ball 长按回调
     */
    void onLongPress(boolean isLock);

    /**
     * ball 触摸抬手回调
     */
    void onActionUp();

    /**
     * ball 触摸移动回调
     */
    void onActionMove(int x, int y);

    /**
     * 处于贴边状态 (value为时间的变化值)
     */
    void onEdgeState(int value);

    /**
     * 是否处于隐藏状态的改变
     */
    void onHideChanged(boolean hide);

    // =============== view 资源获取的方法 ================

    int lx();

    int ly();

    /**
     * 获取屏幕的宽度
     */
    int W();

    /**
     * 获取屏幕的高度
     */
    int H();

    /**
     * 获取控件大小, 无需测量阶段就可拿到view的真实大小
     */
    int getSize();

    /**
     * 发送事件
     */
    @SuppressWarnings("UnusedReturnValue")
    boolean post(Runnable runnable);

    @SuppressWarnings("UnusedReturnValue")
    boolean postDelayed(Runnable runnable, long ms);

    void setLock(boolean lock);

    /**
     * 获取Context
     */
    Context getContext();

    /**
     * 移除事件
     */
    @SuppressWarnings("UnusedReturnValue")
    boolean removeCallbacks(Runnable action);
}
